package model.events; 

import java.util.EventObject;

import model.iview.IPlayer;
import util.Coordinate;
import util.Resources;
/**
 * Évènement représentant un tour joué
 * @author Lucile Gramusset et Guillaume Poussel
 *
 */
@SuppressWarnings("serial")
public class TurnEvent extends EventObject {

    /**
     * Action de jouer un coup
     */
    public static final int PLAY = 0;
    /**
     * Action de passer son tour
     */
    public static final int SKIP = 1;
    /**
     * Action d'échanger des tuiles
     */
    public static final int SWAP = 2;
    
	private String word;
	private Coordinate location;
	private IPlayer player;
	private int action = 0;

	private TurnEvent(Object source) {
		super(source);
	}
	
	/**
	 * Construit un évènement de nouveau tour, avec une acion de passer ou d'échanger les tuiles
	 * @param source Source de l'évènement
	 * @param player Joueur
	 * @param action Action (SKIP ou SWAP)
	 */
	public TurnEvent(Object source, IPlayer player, int action) {
	    this(source);
	    this.player = player;
	    if (action == PLAY) {
	        throw new IllegalArgumentException();
	    }
	    this.action = action;
	}

	/**
	 * Construit un évènement de nouveau tour, lorsqu'un joueur a posé un mot
	 * @param source Source de l'évènement
	 * @param player Joueur
	 * @param word Mot posé
	 * @param location Emplacement du début de mot
	 */
	public TurnEvent(Object source, IPlayer player, String word, Coordinate location) {
		this(source);
		this.player = player;
		this.word = word;
		this.location = location;
	}

	/**
	 * Retourne l'emplacement du début de mot
	 * @return Emplacement du début de mot, <code>null</code> si l'action n'est pas {@code PLAY}
	 */
	public Coordinate getLocation() {
		return this.location;
	}

	/**
     * Mot posé sur le plateau
     * @return Mot posé sur le plateau, <code>null</code> si l'action n'est pas {@code PLAY}
     */
	public String getWord() {
		return word;
	}

	/**
	 * Joueur pour ce tour
	 * @return Le joueur de ce tour
	 */
	public IPlayer getPlayer() {
		return player;
	}
	
	public String toString() {
	    switch(action) {
	    case PLAY:
	        return Resources.getString("ActionLog.Drop", player.getName(), word,location);
	    case SKIP:
	        return Resources.getString("ActionLog.Skip", player.getName());
	    case SWAP:
	        return Resources.getString("ActionLog.Swap", player.getName());
	        default:
	            return "";
	    }
		
	}
	

}
